{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Rent Listing Inqueries"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# import pkg\n",
    "\n",
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "#read data\n",
    "dpath = ''\n",
    "train = pd.read_csv(dpath + 'RentListingInquries_FE_train.csv')\n",
    "#train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_train = train['interest_level']\n",
    "train = train.drop(['interest_level'],axis = 1)\n",
    "X_train = np.array(train)\n",
    "#print X_train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "kfold = StratifiedKFold(n_splits=5,shuffle=True,random_state=3)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def modelfit(alg, X_train, y_train, cv_folds=None, early_stopping_rounds=10):\n",
    "    xgb_param = alg.get_xgb_params()\n",
    "    xgb_param['num_class'] = 3\n",
    "    print 111\n",
    "    #直接调用xgboost，而非sklarn的wrapper类\n",
    "    xgtrain = xgb.DMatrix(X_train, label = y_train)\n",
    "        \n",
    "    cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds =cv_folds,\n",
    "             metrics='mlogloss', early_stopping_rounds=early_stopping_rounds)\n",
    "    print 222\n",
    "    cvresult.to_csv('1_nestimators.csv', index_label = 'n_estimators')\n",
    "    \n",
    "    #最佳参数n_estimators\n",
    "    n_estimators = cvresult.shape[0]\n",
    "    \n",
    "    # 采用交叉验证得到的最佳参数n_estimators，训练模型\n",
    "    alg.set_params(n_estimators = n_estimators)\n",
    "    alg.fit(X_train, y_train, eval_metric='mlogloss')\n",
    "    print 333"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "xgb1 = XGBClassifier(\n",
    "        #learning_rate =0.1,\n",
    "        n_estimators=1000,  #数值大没关系，cv会自动返回合适的n_estimators\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel=0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "test\n",
      "111\n",
      "222\n",
      "333\n",
      "done\n"
     ]
    }
   ],
   "source": [
    "print 'test'\n",
    "modelfit(xgb1, X_train, y_train, cv_folds = kfold)\n",
    "print 'done'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n/+ONod8iXV1pAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xec12588>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv('1_nestimators.csv')\n",
    "        \n",
    "# plot\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "x_axis = range(0, cvresult.shape[0])\n",
    "        \n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'n_estimators4_1.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "n_estimators\ttest-mlogloss-mean\ttest-mlogloss-std\ttrain-mlogloss-mean\ttrain-mlogloss-std\n",
    "80\t0.628348\t0.010896466\t0.498947333\t0.005703935\n",
    "81\t0.628356667\t0.010746471\t0.497479\t0.00549752\n",
    "82\t0.628237\t0.01107864\t0.496001\t0.005668565\n",
    "\n",
    "n_estimators 82 \n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "调整 depth 和 minchildweight"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'max_depth': [3, 5, 7, 9], 'min_child_weight': [1, 3, 5]}"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "max_depth = range(3,10,2)\n",
    "min_child_weight = range(1,6,2)\n",
    "param_test2_1 = dict(max_depth=max_depth, min_child_weight=min_child_weight)\n",
    "param_test2_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "xgb2_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=82,  #第一轮参数调整得到的n_estimators最优值\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda2\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.63645, std: 0.00286, params: {'max_depth': 3, 'min_child_weight': 1},\n",
       "  mean: -0.63679, std: 0.00236, params: {'max_depth': 3, 'min_child_weight': 3},\n",
       "  mean: -0.63786, std: 0.00247, params: {'max_depth': 3, 'min_child_weight': 5},\n",
       "  mean: -0.62680, std: 0.00734, params: {'max_depth': 5, 'min_child_weight': 1},\n",
       "  mean: -0.62693, std: 0.00526, params: {'max_depth': 5, 'min_child_weight': 3},\n",
       "  mean: -0.62740, std: 0.00523, params: {'max_depth': 5, 'min_child_weight': 5},\n",
       "  mean: -0.63069, std: 0.00692, params: {'max_depth': 7, 'min_child_weight': 1},\n",
       "  mean: -0.62804, std: 0.00480, params: {'max_depth': 7, 'min_child_weight': 3},\n",
       "  mean: -0.62976, std: 0.00583, params: {'max_depth': 7, 'min_child_weight': 5},\n",
       "  mean: -0.63878, std: 0.00643, params: {'max_depth': 9, 'min_child_weight': 1},\n",
       "  mean: -0.63331, std: 0.00703, params: {'max_depth': 9, 'min_child_weight': 3},\n",
       "  mean: -0.63037, std: 0.00603, params: {'max_depth': 9, 'min_child_weight': 5}],\n",
       " {'max_depth': 5, 'min_child_weight': 1},\n",
       " -0.62680220703577061)"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch2_1 = GridSearchCV(xgb2_1, param_grid = param_test2_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch2_1.fit(X_train , y_train)\n",
    "\n",
    "gsearch2_1.grid_scores_, gsearch2_1.best_params_,     gsearch2_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda2\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda2\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda2\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda2\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda2\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda2\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda2\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([ 32.47519999,  31.41799998,  30.1658    ,  41.65959997,\n",
       "         43.68140001,  40.81759992,  50.68579993,  49.01320004,\n",
       "         48.5836    ,  60.12660003,  58.65759997,  54.66980004]),\n",
       " 'mean_score_time': array([ 0.09679995,  0.08440003,  0.07460003,  0.14380002,  0.11640005,\n",
       "         0.13740005,  0.15000005,  0.16279998,  0.14699998,  0.21260004,\n",
       "         0.17459998,  0.16539998]),\n",
       " 'mean_test_score': array([-0.63644645, -0.63678921, -0.63786269, -0.62680221, -0.62692582,\n",
       "        -0.62739582, -0.63069196, -0.62803938, -0.62975987, -0.63877883,\n",
       "        -0.63330501, -0.63037448]),\n",
       " 'mean_train_score': array([-0.59583673, -0.59782533, -0.59962052, -0.51234346, -0.52452828,\n",
       "        -0.53336004, -0.40867281, -0.44490608, -0.46681338, -0.31580958,\n",
       "        -0.37522083, -0.41370514]),\n",
       " 'param_max_depth': masked_array(data = [3 3 3 5 5 5 7 7 7 9 9 9],\n",
       "              mask = [False False False False False False False False False False False False],\n",
       "        fill_value = ?),\n",
       " 'param_min_child_weight': masked_array(data = [1 3 5 1 3 5 1 3 5 1 3 5],\n",
       "              mask = [False False False False False False False False False False False False],\n",
       "        fill_value = ?),\n",
       " 'params': [{'max_depth': 3, 'min_child_weight': 1},\n",
       "  {'max_depth': 3, 'min_child_weight': 3},\n",
       "  {'max_depth': 3, 'min_child_weight': 5},\n",
       "  {'max_depth': 5, 'min_child_weight': 1},\n",
       "  {'max_depth': 5, 'min_child_weight': 3},\n",
       "  {'max_depth': 5, 'min_child_weight': 5},\n",
       "  {'max_depth': 7, 'min_child_weight': 1},\n",
       "  {'max_depth': 7, 'min_child_weight': 3},\n",
       "  {'max_depth': 7, 'min_child_weight': 5},\n",
       "  {'max_depth': 9, 'min_child_weight': 1},\n",
       "  {'max_depth': 9, 'min_child_weight': 3},\n",
       "  {'max_depth': 9, 'min_child_weight': 5}],\n",
       " 'rank_test_score': array([ 9, 10, 11,  1,  2,  3,  7,  4,  5, 12,  8,  6]),\n",
       " 'split0_test_score': array([-0.64144873, -0.6404873 , -0.6423791 , -0.63734714, -0.63456558,\n",
       "        -0.63367447, -0.64214913, -0.63452839, -0.63993145, -0.64166385,\n",
       "        -0.64194739, -0.63749072]),\n",
       " 'split0_train_score': array([-0.59482725, -0.59687665, -0.59929611, -0.51311422, -0.52505329,\n",
       "        -0.53360115, -0.41160626, -0.44807613, -0.4697725 , -0.31691904,\n",
       "        -0.37155629, -0.41204579]),\n",
       " 'split1_test_score': array([-0.63342947, -0.63587184, -0.63798926, -0.61582588, -0.6217282 ,\n",
       "        -0.61992653, -0.62492361, -0.6211487 , -0.62480192, -0.62660389,\n",
       "        -0.62290316, -0.6202721 ]),\n",
       " 'split1_train_score': array([-0.59593702, -0.59788566, -0.59944165, -0.51185894, -0.52361127,\n",
       "        -0.53259168, -0.41092193, -0.44404538, -0.46507757, -0.31946725,\n",
       "        -0.37861587, -0.41646853]),\n",
       " 'split2_test_score': array([-0.63462163, -0.63683887, -0.63757773, -0.62474425, -0.62279323,\n",
       "        -0.62644071, -0.62384887, -0.63077793, -0.62457235, -0.64060473,\n",
       "        -0.62810765, -0.62725762]),\n",
       " 'split2_train_score': array([-0.59682708, -0.5986522 , -0.60031442, -0.51197467, -0.52460483,\n",
       "        -0.53447275, -0.40878525, -0.44478326, -0.46894466, -0.31730594,\n",
       "        -0.375958  , -0.4152644 ]),\n",
       " 'split3_test_score': array([-0.63765268, -0.63752938, -0.63619946, -0.63195162, -0.63190872,\n",
       "        -0.63285163, -0.63495359, -0.62965879, -0.63247193, -0.64557303,\n",
       "        -0.63933308, -0.63288893]),\n",
       " 'split3_train_score': array([-0.59410276, -0.59638806, -0.59829056, -0.50943975, -0.5230855 ,\n",
       "        -0.53157736, -0.40374703, -0.44404152, -0.46537635, -0.31003149,\n",
       "        -0.37288311, -0.41149417]),\n",
       " 'split4_test_score': array([-0.63507835, -0.63321507, -0.63516521, -0.62413948, -0.62363005,\n",
       "        -0.62408242, -0.6275815 , -0.62407912, -0.62701897, -0.63944934,\n",
       "        -0.63423471, -0.63396664]),\n",
       " 'split4_train_score': array([-0.59748956, -0.5993241 , -0.60075985, -0.51532974, -0.5262865 ,\n",
       "        -0.53455725, -0.40830357, -0.44358413, -0.46489582, -0.31532415,\n",
       "        -0.37709086, -0.41325283]),\n",
       " 'std_fit_time': array([ 1.25107378,  1.97165101,  0.93148024,  1.08178326,  0.47870896,\n",
       "         0.53088026,  0.96238853,  0.30239541,  0.24018873,  0.51537856,\n",
       "         0.28274563,  3.23889979]),\n",
       " 'std_score_time': array([ 0.01995398,  0.01631691,  0.01165501,  0.02711015,  0.01233855,\n",
       "         0.03871229,  0.00734848,  0.01260793,  0.0073484 ,  0.04380235,\n",
       "         0.01824945,  0.01896944]),\n",
       " 'std_test_score': array([ 0.00285615,  0.00235945,  0.0024713 ,  0.00734253,  0.00525676,\n",
       "         0.0052323 ,  0.00691727,  0.00480421,  0.00582833,  0.0064271 ,\n",
       "         0.00703068,  0.00602766]),\n",
       " 'std_train_score': array([ 0.00124486,  0.00108622,  0.00085856,  0.00191385,  0.00112208,\n",
       "         0.00113999,  0.00275956,  0.00163096,  0.00210018,  0.00317712,\n",
       "         0.00262528,  0.00189283])}"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch2_1.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.626802 using {'max_depth': 5, 'min_child_weight': 1}\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nEjMzq8kPC6JdbFTxvIYAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xc6cbef0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch2_1.best_score_, gsearch2_1.best_params_))\n",
    "test_means = gsearch2_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch2_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch2_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch2_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch2_1.cv_results_).to_csv('my_preds_maxdepth_min_child_weights_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(max_depth), len(min_child_weight))\n",
    "train_scores = np.array(train_means).reshape(len(max_depth), len(min_child_weight))\n",
    "\n",
    "for i, value in enumerate(max_depth):\n",
    "    pyplot.plot(min_child_weight, -test_scores[i], label= 'test_max_depth:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'max_depth' )                                                                                                      \n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig('max_depth_vs_min_child_weght_1.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "最佳 树深度为5 对应 min_child_weight 为1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'max_depth': [4, 5, 6], 'min_child_weight': [1, 2, 3]}"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "max_depth = [4,5,6]\n",
    "min_child_weight = [1,2,3]\n",
    "param_test2_2 = dict(max_depth=max_depth, min_child_weight=min_child_weight)\n",
    "param_test2_2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda2\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.62903, std: 0.00543, params: {'max_depth': 4, 'min_child_weight': 1},\n",
       "  mean: -0.62955, std: 0.00481, params: {'max_depth': 4, 'min_child_weight': 2},\n",
       "  mean: -0.62917, std: 0.00491, params: {'max_depth': 4, 'min_child_weight': 3},\n",
       "  mean: -0.62680, std: 0.00734, params: {'max_depth': 5, 'min_child_weight': 1},\n",
       "  mean: -0.62666, std: 0.00555, params: {'max_depth': 5, 'min_child_weight': 2},\n",
       "  mean: -0.62693, std: 0.00526, params: {'max_depth': 5, 'min_child_weight': 3},\n",
       "  mean: -0.62701, std: 0.00765, params: {'max_depth': 6, 'min_child_weight': 1},\n",
       "  mean: -0.62756, std: 0.00361, params: {'max_depth': 6, 'min_child_weight': 2},\n",
       "  mean: -0.62452, std: 0.00402, params: {'max_depth': 6, 'min_child_weight': 3}],\n",
       " {'max_depth': 6, 'min_child_weight': 3},\n",
       " -0.62452486503174764)"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb2_2 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=82,  #第一轮参数调整得到的n_estimators最优值\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch2_2 = GridSearchCV(xgb2_2, param_grid = param_test2_2, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch2_2.fit(X_train , y_train)\n",
    "\n",
    "gsearch2_2.grid_scores_, gsearch2_2.best_params_,     gsearch2_2.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.14"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
